//路由鉴权:鉴权,项目当中路由可以被访问的权限设置(某一个路由什么条件下可以被访问、什么条件下不可以被访问)
import router from '@/router';
import nprogress from 'nprogress'; //引入进度条插件
//引入进入条样式
import 'nprogress/nprogress.css';
import setting from "@/setting";
//获取用户相关的小仓库内部token数据,去判断用户是否登录成功
import useUserStore from '@/stores/modules/user';
import pinia from "@/stores";
let userStore = useUserStore(pinia);
//全局守卫:项目当中任意路由切换都会触发的钩子
//全局前置守卫
router.beforeEach(async(to: any, from: any, next: any) => {
    document.title = `${setting.title} - ${to.meta.title}`; //设置浏览器的标题
    //to:你将要访问哪个路由
    //from:你从来个路由而来
    //next:路由的放行函数
    nprogress.start(); //开启进度条
    //获取token，去判断用户登录还是未登录
    let token = userStore.token;
    //获取用户名字
    let username = userStore.username;
    if(token){//用户登录判断
        //登录成功，访问login时不能访问，应该指向首页
        if(to.path == '/login'){
            next({path:'/'});
        }else{
            //登录成功访问其余六个路由(登录排除)
            //有用户信息
            if(username){
                next();//放行
            }else{
                //没有用户信息,在路由守卫这里发送请求获取到了用户信息再放行
                try{
                    //获取用户信息，然后放行‘
                    await userStore.userInfo();
                    next();
                }catch (error){//如果token过期，那么request.ts中的响应拦截器会返回错误信息，然后进入这里的catch处理
                    //处理token过期的逻辑或者用户手动的修改了token
                    //退出登录->用户相关的数据清空
                    await userStore.userLogout();
                    next({path:'/login',query:{redirect:to.path}});
                }
            }
        }
    }else{//用户未登录判断(也可以判断登录过期问题)
        if(to.path == '/login'){
            next();
        }else{
            next({path:'/login',query:{redirect:to.path}});
        }
    }
})
//全局后置守卫
router.afterEach((to: any, from: any) => {
    nprogress.done(); //关闭进度条
});

//第一个问题:任意路由切换实现进度条业务 ---nprogress
//第二个问题:路由鉴权(路由组件访问权限的设置)
//全部路由组件:登录|404|任意路由|首页|数据大屏|权限管理(三个子路由)|商品管理(四个子路由)


//用户未登录:可以访问login,其余六个路由不能访问(指向login)
//用户登录成功:不可以访问login[指向首页],其余的路由可以访问






